#ifndef CG_PARTIE_H
#define CG_PARTIE_H

#include <QGraphicsScene>
#include <QtWidgets>
#include "client_jeu.hpp"
#include "cg_jeujoueur.h"
#include "cg_tapis.h"
#include "cg_grandtapis.h"
#include "cg_jeuadversaire.h"

class Cg_Partie : public QGraphicsScene
{
    Q_OBJECT
public:

    Cg_Partie();
    Cg_Partie(ClientJeu *clientJeu);

private :

    ClientJeu *m_clientJeu;
    Cg_Tapis *m_tapis;
    Cg_GrandTapis *m_grandTapis;
    Cg_JeuJoueur *m_jeuJoueur;
    Cg_JeuAdversaire* m_jeuxAdversaires[4];
    QGraphicsPixmapItem *m_pliJoueur[5];
    QPushButton *m_boutonsAnnonces[5], *m_boutonsCouleurs[4], *m_boutonsFigures[4];
    Carte m_chien[3];
    unsigned int m_numeroJoueur;

public slots:

    void adversaires(std::vector<std::string> noms);
    void numero_change(unsigned int n);
    void requete_refusee(Carte posee);
    void pli_termine(unsigned int joueur);
    void doit_priser(Option<Enchere> max);
    void enchere_acceptee(Enchere e);
    void doit_appeler(std::vector<Carte> acceptees);
    void appel_accepte(Carte c);
    void chien(Carte c1, Carte c2, Carte c3);
    void doit_ecarter(std::vector<Carte> possibles, std::vector<Carte> atouts);
    void carteAuChien(Carte c);
    void jeu_est(std::vector<Carte> cartes);
    void partie_terminee(std::vector<int> scores);

private slots:

    void formulerPasse();
    void formulerPrise();
    void formulerGarde();
    void formulerGardeSans();
    void formulerGardeContre();
    void appelRoi();
    void appelDame();
    void appelCavalier();
    void appelValet();
    void appelRoiCoeur();
    void appelRoiCarreau();
    void appelRoiPique();
    void appelRoiTrefle();
    void appelDameCoeur();
    void appelDameCarreau();
    void appelDamePique();
    void appelDameTrefle();
    void appelCavalierCoeur();
    void appelCavalierCarreau();
    void appelCavalierPique();
    void appelCavalierTrefle();
    void appelValetCoeur();
    void appelValetCarreau();
    void appelValetPique();
    void appelValetTrefle();

signals :

    void formuler_prise(Enchere::Prise p);
    void formuler_appel(Carte c);
    void formuler_ecart(std::vector<Carte> ecart);

};

#endif // CG_PARTIE_H
